home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / graphic / rtnews.zip / RTNV5N2 < prev    next >
Internet Message Format  |  1992-09-13  |  93KB

  1. From nucsrl!news.acns.nwu.edu!zaphod.mps.ohio-state.edu!cs.utexas.edu!uunet!psinntp!eye!erich Thu Aug 27 07:15:49 CDT 1992
  2. Article: 13147 of comp.graphics
  3. Path: nucsrl!news.acns.nwu.edu!zaphod.mps.ohio-state.edu!cs.utexas.edu!uunet!psinntp!eye!erich
  4. From: erich@eye.com (Eric Haines)
  5. Newsgroups: comp.graphics
  6. Subject: Ray Tracing News, volume 5, number 2
  7. Message-ID: <1992Aug26.101942.8319@eye.com>
  8. Date: Wed, 26 Aug 92 14:19:42 GMT
  9. Sender: erich@eye.com (Eric Haines)
  10. Distribution: world
  11. Organization: 3D/EYE, Inc.  Ithaca, NY
  12. Lines: 1867
  13.  
  14. It's a monster, as I'm catching up on cullings from last November on...
  15.  
  16.  _ __                 ______                         _ __
  17. ' )  )                  /                           ' )  )
  18.  /--' __.  __  ,     --/ __  __.  _. o ____  _,      /  / _  , , , _
  19. /  \_(_/|_/ (_/_    (_/ / (_(_/|_(__<_/ / <_(_)_    /  (_</_(_(_/_/_)_
  20.              /                               /|
  21.             '                               |/
  22.  
  23.             "Light Makes Right"
  24.  
  25.               August 26, 1992
  26.             Volume 5, Number 2
  27.  
  28. Compiled by Eric Haines, 3D/Eye Inc, 2359 Triphammer Rd, Ithaca, NY 14850
  29.     erich@eye.com
  30. All contents are copyright (c) 1992 by the individual authors
  31. Archive locations: anonymous FTP at princeton.edu (128.112.128.1)
  32.     /pub/Graphics/RTNews, wuarchive.wustl.edu:/graphics/graphics/RTNews,
  33.     and many others.
  34. UUCP archive access: write Kory Hamzeh (quad.com!avatar!kory) for info.
  35.  
  36. Contents:
  37.     Introduction - SIGGRAPH roundtable, etc
  38.     New People, New Addresses, etc
  39.     BSP Traversal Errata, by Kelvin Sung
  40.     The Art of Noise, by Steve Worley
  41.     Ray Tracing Roundup, by Eric Haines
  42.     Graphics Gems III Residency Mask errata, by Joe Cychosz
  43.     Any Future for Efficiency Research?, by Eric Haines
  44.     NuGrid Update, by Mike Gigante
  45.     ======== USENET cullings follow ========
  46.     Spline Patch Ray Intersection Routines, by Sean Graves
  47.     Xdart, from Mark Spychalla
  48.     4D Space Viewing Software, by Steve Hollasch
  49.     BYU Modelling and Visualization Package - Free Demo, by Stacey D. Son
  50.     New Radiosity Program Available, by Guy Moreillon
  51.     Optics Lab Information, by Anthony Siegman
  52.     Ray Tracing (or Casting) Applications, by Tom Wilson
  53.     Goofy (?) Idea, Gary McTaggart
  54.     Constant Time Ray Tracing, by Tom Wilson, Eric Haines, Brian Corrie, and
  55.     Masataka Ohta
  56.     VLSI for Ray Tracing, by Kenneth Cameron, George Kyriazis, Peter De Vijt,
  57.     Jon Leech, Sam Uselton, Thierry Priol, and "Dega Dude"
  58.     The Moon Revisited, by Tom Duff
  59.     Soft Shadow Ideas, compiled by Derek Woolverton
  60.     Book Announcement: Multiprocessor Methods for Computer Graphics Rendering,
  61.         by Scott Whitman
  62.  
  63. -------------------------------------------------------------------------------
  64.  
  65. Introduction
  66.  
  67. Before you hit that "next article" key, at least check out Steve Worley's
  68. article "The Art of Noise".  This is one of the better articles that's been in
  69. the Ray Tracing News, full of interesting bits of advice on using the noise
  70. function effectively for texturing.
  71.  
  72. As usual, SIGGRAPH was fun this year.  Ray tracing is becoming fairly common,
  73. with many rendering packages having it available.  The idea of saving each ray
  74. intersection tree at each pixel is spreading:  Intergraph has had this for
  75. years, and now TDI has added it to their renderer (see Sequin & Smyrl,
  76. SIGGRAPH '89, for the basic technique).  We'll undoubtedly see more of this in
  77. years to come, given that main memory is increasing much faster than screen
  78. resolution.
  79.  
  80. My favorite product was Fractal Painter, which is the most paint-like paint
  81. program I've seen yet.  Nothing to do with ray tracing, but it was cool...
  82.  
  83. One interesting business has arisen in the past year or so:  selling digitized
  84. models.  Viewpoint Animation Engineering has a nice glossy catalog of models
  85. ranging from pterodactyls to spinal cords to eighteen wheelers (and I dare you
  86. to render a scene with all three).  At the show they were giving out demo
  87. disks of Al Capone related datasets:  a '32 Packard, a violin case, a
  88. tommygun, an antique lamp, and a cartoon Al.  No normals per vertex (it's
  89. unclear if their other models have these or not) and no normal per polygon
  90. (most polygons were consistently one way, though I found a few were reversed -
  91. ugh).  Prices listed are in the hundreds of $$$, but these seem fairly
  92. variable, partially depending on your use:  one folder puts various vehicles
  93. at $300-$500 a piece, but another folder offered 20 vehicles for $395 total.
  94. You figure it out:  call them at 1-800-DATASET.  They also do custom
  95. digitizing, running around $1000 per model.  Another company that sells 3D
  96. models (primarily architectural related items, geographic data, and people)
  97. and does digitizing is Acuris at 415-329-1920.
  98.  
  99. Graphics Gems III is out, and contains some nice tidbits on ray tracing and
  100. many other topics.  I particularly like Ben Trumbore's gem for computing tight
  101. bounding volumes for quadrics and tori.  There are some truly gem-like, sharp
  102. thoughts, like Andrew Woo's clever method of avoiding epsilon problems when
  103. using shadow maps.  Plus lots of other great stuff.  And at last, you can find
  104. out what the Gems III code on princeton.edu:/pub/Graphics/GraphicsGems/GemsIII
  105. actually does!  Gems IV will be edited by Paul Heckbert, and is due out in two
  106. years.  Academic Press would like to have one out every year, but the editors
  107. felt that this might lead to diminishing overall quality.
  108.  
  109. One of my recent discoveries in Graphics Gems II (reprinted in Gems III) is
  110. Steve Hollasch's set of macro routines for vector manipulation.  They're easy
  111. to overlook, but quite compact and useful:  two of them (Vec2Op and Vec3Op)
  112. replaced dozens of macros in our old vector manipulation macro library.  Check
  113. them out!  The Gems series is interesting in that there is a lot of knowledge
  114. crammed into each book, and it sometimes takes a little exploration to find
  115. (or stumble upon) some of the wonderful ideas and tricks therein.
  116.  
  117. Two nice things have been happening in ray tracing over the past year.  One is
  118. that wuarchive.wustl.edu:/graphics/graphics has become a good collection site
  119. for various graphics information.  It includes Radiance, a good chunk of the
  120. NCSA programs, many object databases, 31 megs of ray-tracing stuff and the
  121. milton.u.washington.edu virtual worlds archive.  wuarchive recently got a new
  122. drive, which allowed the graphics archive to hop to over 300 megs.  Write to
  123. George Kyriazis <kyriazis@rdrc.rpi.edu>, who is maintaining the graphics
  124. area, if you see something that's old or missing.
  125.  
  126. The other trend is that Rayshade is becoming a testbed for other researchers'
  127. efficiency schemes.  Erik Jansen (fwj@duticg.tudelft.nl) and Wim de Leeuw have
  128. made their BSP traversal code publicly available (see RTNv5n1), Mike Gigante
  129. plans on releasing his NuGrid code as soon as his research paper is accepted,
  130. and there is one researcher who has implemented Arvo & Kirk's 5D scheme using
  131. Rayshade as a base.  This is a wonderful development, in that good code for
  132. various efficiency schemes for one ray tracer are becoming available and so
  133. can be used as the basis for meaningful timing tests.  Such things as
  134. simulated annealing may become easier to explore, since a variety of
  135. interchangeable efficiency schemes will become commonly available.
  136.  
  137. To wrap it up, here is the first paragraph of the Acknowledgements of David
  138. Jevans' interesting Master's thesis (which uses nested grids for efficiency),
  139. "Adaptive Voxel Subdivision for Ray Tracing," Dept. of Computer Science,
  140. Univ. of Calgary, 1990:
  141.  
  142.     As a young, overfunded graduate student, I would often pass idle
  143.     hours drinking medicinal alcoholic concoctions, and firing shotgun
  144.     blasts at pieces of paper nailed to the side of the university's
  145.     orgone accumulator outhouse.  Imagine my surprise when I discovered
  146.     that the performance graphs of my ray tracing algorithms exactly
  147.     matched the patterns blasted into those pellet ridden sheafs!
  148.     Seeing this as a sign of divine acceptance, of some kind of grand
  149.     conjunction of information, I collected my results into the volume
  150.     of forbidden knowledge that you hold before you.
  151.  
  152. -------------------------------------------------------------------------------
  153.  
  154. New People, New Addresses, etc
  155.  
  156. Rob LaMoreaux
  157. 907 Wisconsin Ave.
  158. St. Joseph, MI 49085
  159. (616)-982-3187 work
  160. (616)-983-1743 Home
  161. r.lamoreaux@mi04.zds.com
  162. Raytracing Interest: Creating pictures and eventually short animations
  163.  
  164. I'm using POV to create scenes, and would eventually like to create short
  165. animations.  I try not to program much, but I have been thinking about a
  166. Visual basic front end to launch POV (depends on time (not much available),
  167. ambition and whether someone does it first).  Interested in object files and
  168. object creation utilities (I'm too lazy and impatient to hand assemble things
  169. out of triangles).  Some of the objects I am interested in are:  Cars
  170. (especially racing), houses, landscaping, bicycles, sailboards, a sewing
  171. machine, and anything else interesting to look at.
  172.  
  173.  
  174. # Abe Megahed - interested in issues of scene complexity,
  175. #  global illumination, ray tracing data structs in animation
  176. # University of Wisconsin
  177. # 1413 Mound St
  178. # Madison, Wisconsin 53711
  179. # (608) 256-6306
  180.  
  181. -------------------------------------------------------------------------------
  182.  
  183. BSP Traversal Errata, by Kelvin Sung (ksung@cs.uiuc.edu)
  184.  
  185. The Gem we wrote for GemsIII ("Ray Tracing with The BSP Tree", pp.  271-274)
  186. did not reflect enough credit from Erik Jansen's past work.  Erik Jansen
  187. pointed out to me that the algorithm (in our Gem) is exactly the same (except
  188. for some small details) as the method suggested in Jansen(1986) and therefore
  189. the sentence on page 272 (of GemIII):
  190.  
  191.    (...) the recursive ray traversal algorithm introduced independently by
  192.    Jansen (1986) is a different implementation of the same tree walking idea.
  193.  
  194. should be removed. The sentence on page 271 should be read as:
  195.  
  196.    It is straightforward to implement the Recursive Ray Traversal Algorithm as
  197.    proposed by Jansen(1986) and Arvo(1988) on a BSP tree.
  198.  
  199. I thought the date of the work (Jansen 1986 vs Arvo 1988) shows that Erik
  200. Jansen was the one who first introduced the algorithm.  The fact that his work
  201. was referenced later than Arvo's in that Gem may cause confusion and thus may
  202. not reflect enough credit from Jansen's past work.  This is a mistake and
  203. should be corrected.
  204.  
  205. [Note:  Erik Jansen and Wim de Leeuw have made their BSP code for Rayshade
  206. publicly available.  Write fwj@duticg.tudelft.nl for details. - EAH]
  207.  
  208. -------------------------------------------------------------------------------
  209.  
  210. The Art of Noise, by Steve Worley (spworley@netcom.com)
  211.  
  212. Using Perlin style 3D solid textures for algorithmic generation of surfaces
  213. can be very effective.  (The Perlin paper in '85 SIGGRAPH is the only
  214. reference you really need to implement them.)  Perlin describes an algorithm
  215. for fractal noise generation, the basis of MANY types of surfaces.  The big
  216. advantage of this method is that it is U-V independent:  it is a solid texture
  217. that takes (object) absolute coordinates.
  218.  
  219. Implementing this algorithm is really quite easy, but there are some small
  220. tweaks that can enhance the quality of the surface.  Assuming you have a
  221. noise-generation function (a smooth 3D interpolator given a lattice of values
  222. and derivatives:  Graphics Gems II has the code for a routine by Greg Ward to
  223. do just this) you will often want to make "fractal" noise by summing over many
  224. scales of the noise function.  By decreasing the characteristic size of each
  225. scale as well of the amplitude of those summed scales, after about 5 or 6
  226. scales you'll have a function that will have details on many different size
  227. ranges.  This function (when expressed as a greyscale or even thresholded)
  228. has a cloudy appearance:  there are blobs of diffuseness with soft, ragged
  229. edges.
  230.  
  231. How to use these noise fields to make textures is pretty straightforward:
  232. Perlin gives many examples and there was even an entire course at '92
  233. SIGGRAPH.  I've implemented nearly 50 textures that use fractal noise, and
  234. I've learned some tricks.
  235.  
  236. The biggest problem with the algorithm described above is that there are
  237. artifacts.  You are interpolating over a cubic lattice, and you'll be able to
  238. SEE that lattice especially if you look at just one scale function.  One trick
  239. I use to remove these artifacts is to make the fractal noise more isotropic by
  240. rotating each summed scale to a random orientation.  Since the lattices of the
  241. different scales don't line up, the artifacts will at least be uncorrelated
  242. and a lot less noticeable.  I do this by rotating each scale with a random,
  243. precomputed, rotation matrix.  If you want to return derivatives (for bump
  244. mapping) you'll have to post-multiply the result from each scale with the
  245. appropriate inverse rotation matrix before you add them.
  246.  
  247. I made these matrices by generating random rotation matrices, and taking only
  248. those that point inside a single octant of a sphere.  Since a 90 degree
  249. rotation (or 180 or 270) will still let the lattices match up, a single octant
  250. is the most rotation that is necessary.  [Note that these are full 3D
  251. rotations, not 2D, but you know what I mean.]  Keeping the rotations to this
  252. smaller angle lets you see that there are not two similar rotations for
  253. different scales.  (Remember this is a one-time precompute:  you can manually
  254. sort through about 10 of these and you're done.)  To test what octant a
  255. rotation matrix maps to, just pump the vector (1 0 0) through the matrix and
  256. look for a vector with all positive components.  You can generate the rotation
  257. matrices using the algorithm(s) in Graphics Gems III by Ken Shoemake and Jim
  258. Arvo.
  259.  
  260. This rotation trick is most useful when bump mapping, since the
  261. differentiation really exposes the lattice artifacts:  there are sharp
  262. discontinuities of the second derivatives along the lattice lines.  When you
  263. differentiate for bump mapping, these second derivatives become FIRST
  264. derivatives and are visible.
  265.  
  266. ----
  267.  
  268. When you are summing the scales, each scale will have a size and amplitude
  269. which is a fixed ratio of the scale size and amplitude of the previous scale.
  270. The natural scale to use is 0.5, but DON'T USE THIS.  Better to use
  271. 0.4857463537 or 0.527849474673 which will give you the same effective ratio.
  272. A ratio of exactly 0.5 will help the different scales "register" more
  273. effectively (the small scale repeats exactly twice on top of the larger
  274. scale,) so artifacts can appear periodically.  By using the odd number, the
  275. periodicity is broken.
  276.  
  277. ----
  278.  
  279. A couple of other tricks also makes more useful noise.  MAKE A SPECIAL CASE.
  280. Half of the time when you use noise, it is on a flat surface, like woodgrain
  281. on a table top.  If you make a 2D version of fractal noise, it will be over
  282. twice as fast as a 3D version (which basically computes two "layers" of noise
  283. and interpolates.)  I have a special case that checks for the Y (vertical)
  284. component to be 0, and branches off into a special case subroutine.  If you're
  285. clever, you can even make the 2D special case be a perfect subset of the 3D
  286. case:  that is, the SIDES of the tabletop will call the 3D noise routine but
  287. they will mesh up with the 2D version which is called for the TOP of the
  288. table.  [Easiest way to be clever:  take your original code, globally replace
  289. the variable "Y" with 0, then have fun in Emacs removing all the terms that
  290. vanish.  This guarantees that your special case will match up with your
  291. general 3D routine, but you won't have to think too hard about how to
  292. implement it.]  Only one disadvantage to this technique:  the rotation
  293. matrices (from the previous idea) will make even a flat tabletop have Y!=0.
  294. You can either change your rotation matrices to be only 2D (spins around the Y
  295. axis), live without the rotation enhancement, or live with the slower
  296. computation.  Your call.  My implementation let the user decide, with the
  297. default being NOT to use rotations.
  298.  
  299. ----
  300.  
  301. Yet another trick.  NORMALIZE your noise.  Ideally, you want the fractal
  302. noise, no matter how many scales or what scale size or ratio you use, to
  303. return a value over the same range.  This is easy to do:  just divide the
  304. final sum by the square root of the sum of the squares of all the amplitudes
  305. of the scales.  This makes it a lot nicer when you are tweaking textures:  the
  306. relative amounts of colors or size of the bumps won't be affected when you
  307. change the scale or amplitude ratio or number of summed scales.
  308.  
  309. ----
  310.  
  311. For user convenience, you might even want to make another type of
  312. normalization.  One common use of the fractal noise value is to feed the value
  313. into a color spline.  If a user sets the "levels" of the color spline, it can
  314. be VERY difficult for them to set the levels right in order to get the
  315. "coverage" they need.  If they want to make white clouds on a mostly blue sky,
  316. what value does they choose for the threshold where white starts being added?
  317. I solved this problem by computing 25,000,000 values of noise and making a
  318. probability distribution (just a histogram.)  By recording the different
  319. percentiles (5% of the noise values are under this number, 10% under this
  320. one....  95% under this one..)  I was able to get a PERCENTAGE mapping of the
  321. distribution.  When a user wants the sky to be 90% blue, they say that the
  322. white color should be added starting at 0.90.  The program maps this value
  323. 0.90 back into the corresponding noise value, and the user gets the 90%
  324. coverage they asked for.  (I have noise that returns a value from -1 to 1, but
  325. most values are clustered around 0.  90% corresponds to a value of 1.442 in my
  326. implementation.)  This convenience is no real computational load, but for the
  327. user, it makes using the texture a LOT more intuitive.
  328.  
  329. Using Perlin fractal noise is an art, but it is a very effective way to make
  330. complex surfaces.  Good luck!
  331.  
  332. And for the curious, my textures are a commercial product, sorry, I can't give
  333. you the code.  :-)
  334.  
  335. -------------------------------------------------------------------------------
  336.  
  337. Ray Tracing Roundup, by Eric Haines
  338.  
  339. The computer graphics archive that is resident on iear.arts.rpi.edu is being
  340. moved to wuarchive.wustl.edu.  The FTP directory is graphics/graphics.  In
  341. that directory there is a CONTENTS file that gives a roadmap of the
  342. directories, and also an ls-lR file giving exact pathnames.  Note that a book
  343. errata directory has started here - authors, please send George your errata.
  344. Currently errata for "An Introduction to Ray Tracing" and "Digital Image
  345. Warping" are available, with more expected.  In case you don't know, you can
  346. NFS mount the wuarchive directories if you'd like.  Right now there are more
  347. than 500 systems mounting it.  Contact:  George Kyriazis
  348. <kyriazis@rdrc.rpi.edu>.
  349.  
  350.  
  351. The fabled POV v1.0 ray tracer (a.k.a. son of DKBtrace) is finally available,
  352. being released just before SIGGRAPH.  It's available on alfred.ccs.carleton.ca
  353. [134.117.1.1]:pub/pov-ray, on the BBS 'You Can Call Me Ray' in North Chicago
  354. suburbs (708-358-5611), and on Compu$erve.
  355.  
  356. There is also a mailing list for POV and DKBtrace.  To subscribe, send a mail
  357. containing the body:
  358.     subscribe dkb-l <Your full name>
  359. to listserv@trearn.bitnet  (yes, that's in Turkey).  You will then be added to
  360. the list, and every mail that you send to
  361.     dkb-l@trearn.bitnet
  362. goes to anyone else subscribed on the list.
  363.  
  364.  
  365. GIF and JPEG images of the SPD databases and some of my old thesis images are
  366. stored at ftp.ipl.rpi.edu [128.113.14.50] sigma/erich, nic.funet.fi (somewhere)
  367. and at gondwana.ecr.mu.oz.au [128.250.70.62] pub/images/haines.
  368.  
  369.  
  370. Lee Butler is attempting to create a texture library at his FTP site.  His
  371. interest is in 2 and 3 dimensional textures of materials suitable for surface
  372. texturing.  He is mostly interested in photographic quality textures and
  373. bump-maps.  He accepts data in most popular formats (TIFF, GIF, JPEG, etc),
  374. but may convert data in order to conserve disk space.  He'd like a little
  375. descriptive text to go with any textures you send, i.e.  just enough to
  376. identify what the subject matter is, what the image dimensions are, etc.
  377. Please make sure what you send is in the public domain (e.g.  scanned in
  378. pictures from books are not allowed, including Brodatz's well-known "Textures"
  379. book, which is copyright).  (contact Lee A.  Butler <butler@BRL.MIL>)
  380.  
  381.  
  382. On hanauma.stanford.edu is a 720x360 array of elevation data, containing one
  383. ieee floating point number for every half degree longitude and latitude.
  384. [This is quite nice! - EAH] (from Ken Chin-Purcell <ken@msc.edu>)
  385.  
  386.  
  387. Some scanned in Brodatz textures are available from cicero.cs.umass.edu:
  388. /texture_temp.  They are 512x512 grayscale.  (from Julien Flack
  389. <julien@scs.leeds.ac.uk>).
  390.  
  391.  
  392.  
  393. Colby Kraybill has placed texture maps from Hans du Buf
  394. (dubuf@ltssun1.epfl.ch) on pioneer.unm.edu [129.24.9.217]:  pub/texture_maps
  395. (from Colby Kraybill <opus@pioneer.unm.edu>) [these include aerial swatches,
  396. Brodatz textures, and synthetic swatches. - EAH]
  397.  
  398.  
  399. The Chapel Hill Volume Rendering Test Datasets, Volumes I and II are available
  400. for FTP from omicron.cs.unc.edu in pub/softlab/CHVRTD.  These include a 3D
  401. volume set for two heads, a brain, a knee, electron density maps for RNA and
  402. other molecules, etc.
  403.  
  404.  
  405. T3DLIB (the TTDDD model conversion package) is now at version 34 and is at
  406. hubcap.clemson.edu [130.127.8.1]:pub/amiga/incoming/imagine/TTDDDLIB.  There
  407. are 3D models in .../imagine/objects.  The converter now supports DXF format
  408. output.
  409.  
  410.  
  411. Version 4 of the collection of ray tracing abstracts is ready.  I've put it in
  412. several ftp sites (wuarchive.wustl.edu:graphics/graphics/ray or maybe bib).
  413. To get it, do the following:  get rtabs.11.91.shar.Z using binary mode,
  414. uncompress it, and then unshar it (sh rtabs.11.91.shar).  Then read READ.ME.
  415. The abstracts (RTabs) can be converted to two forms:  Latex (preferred) or
  416. troff -me.  The filters I've included may help you write your own if you need
  417. something else.  A second file (RTnew) contains just the added abstracts if
  418. you don't want to print the whole thing again.  There are now 306 abstracts.
  419. (from Tom Wilson <wilson@cs.ucf.edu>)
  420.  
  421.  
  422. After listening in on the fast rotation / wireframe discussion in
  423. comp.graphics.  I decided to release a simple 3D wireframe viewer that I wrote
  424. myself that runs under X11.  It is available via anonymous ftp at
  425. castlab.engr.wisc.edu (128.104.52.10) and is found as /pub/x3d.1.1.tar.Z .
  426. MIFF files of rendered objects are on castlab in /pub/rendered_objs.  More
  427. objects are on castlab in /pub/more_objs.  (from Mark Spychalla
  428. <spy@castlab.engr.wisc.edu>)
  429.  
  430.  
  431. The shadow buffer algorithm is now implemented in the SIPP rendering library.
  432. Version 3.0 is available from isy.liu.se (130.236.1.3), pub/sipp/sipp-3.0.tar.Z
  433.  
  434.  
  435. As part of Guy Moreillon's diploma project (Interactive Radiosity), he has
  436. created a scene made out of objects in OFF format.  It represents the inside
  437. of a house, with one big room and a smaller one, stairs going up, a couple of
  438. armchairs, a table, a kitchen chair, a fridge, and so on.  He uploaded it on
  439. gondwana.ecr.mu.oz.au as well as cs.uoregon.edu in the incoming directory
  440. (file house.tar.Z).  (from Guy Moreillon <moreillo@disuns1.epfl.ch>)
  441.  
  442.  
  443. fractint v17 will output a few raytrace formats (dkb/pvray, vivid, raw
  444. triangle mesh) from the 3d mapping function.  fraint17.exe will be on
  445. wuarchive.wustl.edu. (from Tony Audas <taudas@ais.org>)
  446.  
  447.  
  448. There is an enhanced version of Rayshade available at weedeater.math.yale.edu:
  449. incoming/ray406enh2.tar.Z.  It adds new blobbies, swept spheres, and all sorts
  450. of other things to the original (from Larry Coffin
  451. <lcoffin@clciris.chem.umr.edu>)
  452.  
  453. An Amiga version of Rayshade 4.0.6 is up for FTP at ab20.larc.nasa.gov
  454. (/incoming/amiga/Rayshade) and at weedeater.math.yale.edu
  455. (/incoming/AmigaRayshade).  Bug reports to me and I'll see who they originally
  456. belong to.  If they're mine, I'll fix'em, eh? (by Colin DeWolfe,
  457. <dewolfe@ug.cs.dal.ca>)
  458.  
  459. A distributed version of Craig Kolb's Rayshade 4.0 is available
  460. on ftp site princeton.edu as pub/Graphics/rayshade.4.0/etc/rayshade-rrlib.tar.Z
  461. It makes raytracing very much faster by dividing a frame or animation into
  462. squares, which are distributed on a unlimited number of servers. (from
  463. Wilfried Koch <bj030@aix370.rrz.uni-koeln.de>).
  464.  
  465.  
  466. The "art" raytracer has undergone some changes and now includes the addition
  467. of heightfields (as output by programs such as fracland), some additional
  468. capabilities for rendering algebraic surfaces, several new textures, a couple
  469. of speed ups and the usual collection of bug fixes.  Contributed scenes are
  470. available in pub/contrib/artscenes on gondwana and /graphics/graphics/echidna
  471. on wuarchive.wustl.edu.  Anyone wishing to contribute can place files in
  472. incoming on gondwana.  (from Eric H. Echidna <echidna@ecr.mu.oz.au>)
  473. [wuarchive.wustl.edu has this in graphics/graphics/echidna]
  474.  
  475.  
  476. There are new versions of the RTrace ray-tracer (version 7.3.2) and the scene
  477. translator SCN2SFF (version 1.3) at asterix.inescn.pt [192.35.246.17] in
  478. directory pub/RTrace.  Some bugs were fixed and new features added:
  479.     - 3D text (fonts, orientation, spacing, etc - high quality)
  480.     - CSG objects
  481. An MS-DOS version for use with DJGPP DOS extender (GO32) is in
  482. pub/RTrace/PC-386/rtrace.zip.  The pub/RTrace directory has been reorganized.
  483. There are new subdirectories with new images (medical, molecular, etc), scene
  484. converters and other tools.  [There have been further bug fixes and new
  485. features since then, but you get the idea - EAH] (from Antonio Costa
  486. <acc@basinger.inescn.pt>)
  487.  
  488.  
  489. Some more notes on reaction-diffusion textures (see last issue, this column):
  490. do a lint on Greg Turk's code before you run it, and you might also want to
  491. make sure your "random()" function works as he thinks it does (mine didn't - I
  492. changed to drand48()).  Note that Witkin & Kass's equation #5 also has a typo:
  493. it should be C(t+ delta t) - C(t) on the left side of the equation.  Also,
  494. Andrew Witkin says section 6.1's R function is a bit unstable.  I haven't got
  495. it to work, but Greg Turk's code does pretty much the same thing in a
  496. different way.
  497.  
  498.  
  499. Other new things (later in this issue) include spline patch ray intersection
  500. routines, 4D space viewing software, a distributed ray tracer, a free trial
  501. version of a modelling and visualization package from BYU, and a new radiosity
  502. program.
  503.  
  504. -------------------------------------------------------------------------------
  505.  
  506. Graphics Gems III Residency Mask errata, by Joe Cychosz
  507.     (3ksnn64@ecn.purdue.edu)
  508.  
  509. The following is a correction to "Use of Residency Masks and Object Space
  510. Partitioning to Eliminate Ray-Object Intersection Calculations"
  511.  
  512. Page 285 should read:
  513.  
  514.   By updating the ray mask as it passes from cell to cell, a quick
  515. determination of whether an object within the cell needs to be intersected can
  516. be made by simply ANDing the residency mask of the object with the (not the
  517. complement of) residency mask for the ray.
  518.  
  519. The process goes something like this:
  520.  
  521. ray_mask = 0
  522.  
  523. foreach (cell the ray passes through) {
  524.     foreach (object in the cell) {
  525.     if  (ray_mask & object_mask == 0) {
  526.         compute the ray-object intersection
  527.     }
  528.     }
  529.     update ray_mask marking for cell
  530. }
  531.  
  532. The important thing here is to mark the cell after it is processed.
  533.  
  534. -------------------------------------------------------------------------------
  535.  
  536. Any Future for Efficiency Research?, by Eric Haines
  537.  
  538. As far as the SIGGRAPH papers committee is concerned, efficient ray tracing
  539. seems to be pretty much a solved problem (i.e. no efficiency papers have been
  540. accepted in years).  To be fair, SIGGRAPH tends to present papers which break
  541. new ground; lately there haven't been any radical breakthroughs in efficiency
  542. research.  The research in this area has taken on more of an engineering feel,
  543. where there are incrementally better methods developed over time.
  544.  
  545. On one level, I tend to agree that efficiency is "solved":  grids,
  546. octrees/BSP, and automatic bounding volume hierarchy are all in the same
  547. ballpark.  However, Mike Gigante points out that raw speed is not the best
  548. qualification for a scheme.  Yes, if you tweak grid placement and run it at a
  549. variety of resolutions, you'll usually find that scheme is very fast, possibly
  550. faster than any other scheme.  The problem is that a typical user does not
  551. want to deal with efficiency tweaking at all, and so the best efficiency
  552. scheme may not be the fastest, but rather something near optimal that is
  553. automatic and will work in a wide range of environments without serious
  554. degradations in speed or memory usage.
  555.  
  556. As far as future research goes, I've yet to see much work on Jim Arvo's idea
  557. of simulated annealing applied to efficiency schemes (see the RTNews/RTNews1
  558. file).  His idea is that sometimes one scheme is significantly better than the
  559. others for a particular scene or part of an environment (see Kirk & Arvo's
  560. "Ray Tracing Kernel" paper from Ausgraph '88 for using multiple efficiency
  561. schemes).  For a single 1280x1024 image it may not be worth doing much
  562. analysis to determine which is the best efficiency scheme, but if you're doing
  563. an animation or an extremely high resolution image it may be worth spending
  564. more time up front to save time later.  Hybrid approaches may be the best
  565. overall solution, where objects or volumes have different efficiency schemes
  566. depending on predicted performance.  There's an interesting paper:
  567.  
  568.  H. K. Choi, C. M. Kyung, "PYSHA: a shadow-testing acceleration scheme for ray
  569.  tracing", Computer-aided design, vol. 24, no. 2, Feb. 1992
  570.  
  571. which talks about deciding which efficiency scheme to use on the fly by having
  572. a cost function approximate which will be cheaper.
  573.  
  574. It seems that the way in which space is filled is the main determinant of
  575. which scheme is most efficient.  Grids, for example, excel when the
  576. distribution of primitives is uniform.  Being able to quickly characterize how
  577. space is filled could allow choosing the best efficiency scheme.  Determining
  578. what the correlation between some distribution statistics and which scheme is
  579. fastest is probably trickier than characterizing the space itself.  There is
  580. also the problem of platform independence and attempting to determine what
  581. "fastest" means in a general sense (minimizing the number of intersection
  582. tests is a good start, but the costs of each scheme needs to be factored in).
  583.  
  584. Some interesting work is being done on speeding up ray-tracing for animation by
  585. using temporal coherence.  For example, Jevans paper in Graphics Interface '92:
  586.  
  587.     %A David Jevans
  588.     %T Object Space Temporal Coherence for Ray Tracing
  589.     %J Proceedings of Graphics Interface '92
  590.     %I Canadian Information Processing Society
  591.     %C Toronto, Ontario
  592.     %D May 1992
  593.     %P 176-183
  594.  
  595. is one of the latest in this area of research.
  596.  
  597. Another topic of interest which has not been explored much is efficient
  598. ray-casting for non-rendering related tasks.  Saul Youssef (see the ray
  599. tracing bibliography on the net) has researched shooting rays for high energy
  600. physics work, John Wallace and I wrote a paper about ray-casting for radiosity
  601. visibility testing, and there has been some work done for volume visualization
  602. ray tracing.  The assumption has been that "what's good for ray tracing is
  603. good for everything else" and that the current popular efficiency schemes are
  604. sufficient.  In our work on radiosity we have seen different sources of
  605. coherence which can be exploited in interesting ways.  If someone is doing a
  606. mass-properties study of an object by casting rays the problem can be
  607. restructured to minimize ray-object testing that is not normally available to
  608. a ray tracer, since we know in advance where all the rays will be traveling.
  609.  
  610. -------------------------------------------------------------------------------
  611.  
  612. NuGrid Update, by Mike Gigante (mg@godzilla.cgl.citri.edu.au):
  613.  
  614. Since I last sent you all mail about the performance tests on NUgrid [see last
  615. issue. -EAH], I have been burning the midnight oil and made some significant
  616. new developments (IMHO of course).
  617.  
  618. I was actually writing a paper (for SIGGRAPH) with the results as well as a
  619. better criteria for building the NUgrid (rather than the end of the bbox),
  620. when I worked out a technique for the totally automatic construction of
  621. NUgrids.  That is right -- even tho' NUgrid was much much less sensitive than
  622. grids in the selection of the grid resolution, it now builds a close to optimal
  623. NUgrid automatically.  In fact in many cases, the result is better than the
  624. best case performance in previous NUgrid versions.  All this was absolute last
  625. minute stuff!  Since we are so far away, the damn couriers wanted 4 working
  626. days to get it to pixar!!!  I only came up with the method 3 days before the
  627. paper had top leave (as I was starting to write up the previous stuff!!!).  I
  628. actually managed to crank all the code out and do a set of test cases.  I had
  629. the courier waiting by while I pasted in the results!!  Why do ideas come at
  630. awkward times?
  631.  
  632. I have spent the last couple of days cleaning up the paper and stuff, even
  633. tho' it won't get to the siggraph committee, I wanted to finish it off now
  634. while it was all fresh in my mind.  I am disappointed that the copy I sent
  635. was fairly rough, but boy were the results good!  I am now working on making
  636. the automatic method work even better.
  637.  
  638. I have included a couple of tables below.
  639.  
  640. BTW, we actually got the Octree stuff implemented also, it uses Samet's
  641. neighbour following stuff so traversal is very fast.  NUgrid still whips it in
  642. most cases and is very competitive in the other cases.  From these results,
  643. the uniform grid should be a dead duck.
  644.  
  645. BTW, I have tested over 60 datasets with each of the methods below, ranging
  646. from a few dozen polygons up to 880,000 independent phong triangles.
  647.  
  648. I plan to make all the code available after I know what is happening with the
  649. paper, if the results don't make up for the rather hurried nature of the
  650. paper, then I already have in my hands a very publishable newer version and I
  651. have no doubt it will get in somewhere.
  652.  
  653. Here are some results, all this was in rayshade, with
  654.  
  655. 1) Uniform grid (as per vanilla rayshade)
  656. 2) NUgrid 1 (as described in Ausgraph 90 paper, but with ray counter and
  657. raybounds optimizations (which rayshade's uniform grid had))
  658. 3) NUgrid 2 (as described in my paper submission - a different
  659. criteria for where to drop the dividing planes)
  660. 4) AutoNUgrid
  661. 5) Octree.
  662.  
  663. the first 3 were tested with resolution 4x4x4 -> 36x36x36 in increments of 2,
  664. AutoNUgrid had only 1 test config of course, Octree was tested with
  665. subdivision depth 2 (equiv to 4x4x4 grid/NUgrid) through to depth 10 (where we
  666. didn't run out of memory!!!).
  667.  
  668. Some of the bigger cases are still finishing their timings now, so within
  669. another week or so I can complete the tables.  Even so, the trend is very
  670. clear from the plots I have done of all the tests.  I am completing the test
  671. cases for completeness only.
  672.  
  673. Anyhow, here are the tables...
  674.  
  675. Best and worst case performance for SPD model Balls:
  676.       |      Grid  |     NUgrid 1  |     NUgrid 2  |     Auto  |   Octree
  677. Best  |    1286.75 |      476.09   |      421.30   |    737.32 | 21695.24
  678. Worst |   10510.54 |      2755.95  |      2895.47  |           |   895.49
  679.  
  680.  
  681. ... for SPD model Gears:
  682.       |      Grid  |     NUgrid 1  |     NUgrid 2  |     Auto  |   Octree
  683. Best  |    1935.06 |       2225.37 |     2129.30   |  2475.14  |  1844.92
  684. Worst |   25870.45 |      12116.60 |     7039.23   |           | 68208.26
  685.  
  686.  
  687. ... for SPD model Mount:
  688.       |      Grid  |     NUgrid 1  |     NUgrid 2  |     Auto  |   Octree
  689. Best  |     505.69 |      455.84   |     436.91    |  512.24   | 451.99
  690. Worst |    2059.52 |      1479.85  |    1326.74    |           | 9281.84
  691.  
  692.  
  693. ... for SPD model Rings:
  694.       |      Grid  |     NUgrid 1  |     NUgrid 2  |     Auto  |   Octree
  695. Best  |    799.76  |      918.94   |      767.40   |  811.32   |    760.52
  696. Worst |   4852.32  |     5376.37   |     4284.81   |           |  13688.93
  697.  
  698.  
  699. ... for SPD model Teapot:
  700.       |      Grid  |     NUgrid 1  |     NUgrid 2  |     Auto  |   Octree
  701. Best  |    345.39  |      344.60   |      336.09   |  491.06   |   357.74
  702. Worst |   3617.02  |     2492.49   |     2672.95   |           | 17756.98
  703.  
  704.  
  705. ... for SPD model Tetra:
  706.       |      Grid  |     NUgrid 1  |     NUgrid 2  |     Auto  |   Octree
  707. Best  |    79.13   |      77.45    |      75.45    |    98.29  |  123.64
  708. Worst |   348.72   |     242.01    |     245.11    |           | 1699.55
  709.  
  710.  
  711. ... for SPD model Tree:
  712.       |      Grid  |     NUgrid 1  |     NUgrid 2  |     Auto  |   Octree
  713. Best  |    5013.27 |      667.20   |    502.07     |    833.47 |   565.85
  714. Worst |   18763.96 |     5019.25   |   3670.67     |           | 25418.44
  715.  
  716.  
  717. ======== USENET cullings follow ===============================================
  718.  
  719. Spline Patch Ray Intersection Routines, by Sean Graves (sean@cs.tamu.edu)
  720.  
  721. I wrote some routines for raytracing patches.  They are based on a paper by:
  722.  
  723. Levner G, Tassinari P, Marini D (1987) A simple method for ray tracing bicubic
  724. surfaces.  In: Kunii TL (ed) "Theoretical Foundations of Computer Graphics and
  725. CAD", 1987, Springer, Tokyo, pp 805-814.
  726.  
  727. These routines can work with any bicubic patch such as a bezier, b-spline,
  728. cardinal, beta-spline, etc.  These are the routines that are in the library:
  729.  
  730.  *     NewPatch - Allocates the patch data structures and returns a pointer.
  731.  *     DefPatch - Defines a patch, given a patch pointer.
  732.  *     IsectPatch - Intersects a ray and a patch. Returns u, v, t, pnt.
  733.  *     NormalPatch - Given a patch and a u, v position, returns the normal.
  734.  *     FreePatch - Deallocates a patch.
  735.  *
  736.  *   Additionally, there is one useful routine not specific to patches:
  737.  *     BoxIntersect - Given a ray and a box, returns the intersection point.
  738.  
  739. These should give you the capability to raytrace a patch.  I have used them
  740. successfully in a raytracing package I wrote.  You can use them as is or
  741. use them as an example for your own code.
  742.  
  743. [these are in wuarchive in the ray subdirectory, spline-patch.tar.Z]
  744.  
  745. -------------------------------------------------------------------------------
  746.  
  747. Xdart, from Mark Spychalla (spy@castlab.engr.wisc.edu)
  748.  
  749. xdart, a distributed raytracer that runs under X11, is available via anonymous
  750. ftp at castlab.engr.wisc.edu (128.104.52.10) The clients are distributed as
  751. binaries and C source.  The servers are distributed as binaries ONLY for the
  752. following systems:
  753.  
  754.    DECstation
  755.    SPARCstation
  756.    NeXT
  757.    HP Snake (710)
  758.  
  759. You MUST have one of the above machine types in order to run the program.  I
  760. wrote the client and encourage anyone who wishes to modify the source and
  761. experiment with it.  Abe Megahed wrote the raytrace engine and does not wish
  762. to release its source code; thus, source for the server will not be
  763. distributed.
  764.  
  765. -------------------------------------------------------------------------------
  766.  
  767. 4D Space Viewing Software, by Steve Hollasch (hollasch@kpc.com)
  768.  
  769.     I'm releasing to the public domain two packages for 4D viewing.  These
  770. packages were developed in conjunction with my master's thesis at Arizona
  771. State University, entitled "Four-Space Visualization of 4D Objects", written
  772. May 1991.
  773.  
  774.     wire4 is a 4D wireframe package that takes geometry information from input
  775. files, and has such features as PostScript output, colored edges, depth-cued
  776. edges, real-time 3D and 4D rotations, and other little features.  wire4 uses
  777. the GL interface, so it runs on most GL platforms and quite a few others that
  778. support the GL interface.
  779.  
  780.     ray4 uses 4D raytracing to render hyperspheres, hypertetrahedra,
  781. hyperplanes, and hyperparallelepipeds.  ray4 runs on any platform that
  782. supports C with floating-point arithmetic, but the current package only has
  783. the display program for SGI workstations.  I have a display program for the
  784. Amiga, but it's not ready for release yet (I haven't yet uploaded it to work).
  785. In addition, Mark Craig has written a sunraster output file display program; I
  786. hope to release that soon also (let me know if you're interested).  The
  787. software is available by ftp from ftp.kpc.com /pub/graphics/holl91,
  788. /pub/graphics/ray4, /pub/graphics/wire4.
  789.  
  790. -------------------------------------------------------------------------------
  791.  
  792. BYU Modelling and Visualization Package - Free Demo, by Stacey D. Son
  793.  
  794. CQUEL.BYU (pronounced "sequel") is a brand new modelling and visualization
  795. package for the UNIX workstation.  Some of it's features include:  animation,
  796. raytracing, scientific visualization, interactive modelling and editing,
  797. quadric primitives, Bezier and NURBS surfaces, constructive solid geometry,
  798. texture mapping, graphical user interface, and free-form deformation to name a
  799. few.
  800.  
  801. The Engineering Computer Graphics Laboratory at Brigham Young University is
  802. offering a 30-day demonstration of this new software.  CQUEL.BYU will run on
  803. the following workstations under X-Windows:  SGI 4D, DEC Station 3100/5000,
  804. HP9000 700/800 series, SUN4/Sparc Station, and IBM RS6000.  Just send a tape
  805. or a $20 (US dollars) check to:
  806.  
  807.     Engineering Computer Graphics Laboratory
  808.     Brigham Young University
  809.     368 Clyde Building
  810.     Provo, UT  84602
  811.     PHONE:  801-378-2812
  812.     E-Mail: cquel@byu.edu
  813.  
  814. Also, please specify your machine type and operating system.
  815.  
  816. Stacey D. Son                           459 Clyde Building
  817. Operations Manager                      Provo, UT 84602
  818. Brigham Young University                Voice:(801)378-5950 FAX:(801)378-6586
  819. College of Engineering & Technology     Email: sson@ee.byu.edu
  820.  
  821. -------------------------------------------------------------------------------
  822.  
  823. New Radiosity Program Available, by Guy Moreillon (moreillo@disuns2.epfl.ch)
  824.  
  825.     There is a new radiosity program available on the network (one of the
  826. very few... radiosity seems to be less popular than ray-tracing...).
  827.  
  828.     Rad (as it is called) allows real-time walkthrough and interactive
  829. modification of the scene during computation. Textures are supported when
  830. hardware allows. The computation algorithm is based on progressive radiosity,
  831. and uses automatic patch subdivision to refine the solution.
  832.  
  833.     There is one small catch though: Rad only runs on SGI Workstations.
  834. Sorry about that, but I wasn't gonna rewrite a whole GL for X11.
  835.  
  836.     Rad is currently available on the following anonymous ftp sites:
  837. gondwana.ecr.mu.oz.au    in    pub/rad.tar.Z
  838. wuarchive.wustl.edu    in    pub/rad.tar.Z
  839.  
  840. -------------------------------------------------------------------------------
  841.  
  842. Optics Lab Information, by Anthony Siegman (siegman@EE.Stanford.EDU)
  843.  
  844. >Does anybody know of any public domain ray tracing program
  845. >i.e. for simulation of image formation through a user definable
  846. >lens.
  847.  
  848. "Optics Lab", an educational program available for about $35 from
  849.  
  850.     Intellimation Library for the Macintosh
  851.     P. O. Box 1530
  852.     Santa Barbara  CA  93116-1530
  853.  
  854.     800-346-8355
  855.     805-968-8899 (fax)
  856.  
  857. is not a super-high-powered lens design program but might be adequate for your
  858. application.  Includes a "lens cabinet" of user adjustable lenses, mirrors,
  859. and stops; click and drag to position elements on screen; use the mouse to
  860. launch individual rays or ray bundles, and see them propagate or bounce on
  861. screen.
  862.  
  863. -------------------------------------------------------------------------------
  864.  
  865. Ray Tracing (or Casting) Applications, by Tom Wilson
  866.  
  867. I'm curious about the number of areas that ray tracing can be used. Here's
  868. an initial list of applications that I know. Please add to it if you can.
  869. I've stuck to papers/research that I know about.
  870.  
  871. Image Synthesis (Rendering)
  872.   Advertising
  873.   Film Production
  874. Lighting Design
  875. Medical Imaging
  876. Molecular Modeling
  877. Relativity
  878. Acoustic Simulation
  879. Seismic Simulation
  880. Simulation and Training (flight/tank simulators, etc.)
  881.  
  882. ----
  883.  
  884. Howard Lo (hlo@orca.dallas.sgi.com) adds:
  885.  
  886. Antenna analysis
  887. Radar Cross Section analysis
  888.  
  889. ----
  890.  
  891. Davyd Norris (daffy@vaxc.cc.monash.edu.au) adds:
  892.  
  893. Attenuation and Multiple Scattering corrections for Neutron Diffraction
  894.  
  895. ----
  896.  
  897. Eric Haines adds:
  898.  
  899. Monte Carlo simulation of particle interactions in High Energy Physics -
  900.     Saul Youssef has a number of papers related to this topic.
  901.  
  902. ----
  903.  
  904. Steve Hollasch (hollasch@kpc.com) comments:
  905.  
  906. > Lighting Design
  907.  
  908.     Raytracing is only of limited use in lighting design.  It's good for
  909. casting shadows and dealing with reflections of light sources, but it
  910. fails for diffuse interreflection.  For this reason, radiosity is usually
  911. a better approach for lighting design, since it propagates light more
  912. realistically than raytracing.  The "best" approaches that I've seen
  913. attempt to marry the methods of ray tracing with radiosity.
  914.  
  915. > Medical Imaging
  916. > Molecular Modeling
  917. > Simulation and Training (flight/tank simulators, etc.)
  918.  
  919.     In my opinion, these areas are NOT best met with ray tracing, since
  920. they are better implemented in a dynamic fashion.  In fact, I don't
  921. believe I've _ever_ seen a simulator that uses a ray tracing method.  If
  922. you've got one up your sleeve, we'd LOVE to see it.  =^)
  923.  
  924. > Relativity
  925.  
  926.     This is a very good one.  Ray tracing has the advantage that of all
  927. other methods, it (IMHO) extends most easily to alternate geometries.
  928. This in fact is a good area to explore further.  I used ray tracing to
  929. render 4D geometry for my thesis, and was surprised by how straight-
  930. forward the implementation was.  Implementing the display of 4D objects
  931. with scanline (scanplane?) methods is anything but trivial, but raytracing
  932. 4D is delightfully simple.
  933.  
  934.     Other possible areas include:
  935.  
  936.     Rendering Translucent Densities
  937.     (clouds, gasses, liquids, etc.)
  938.  
  939.     Simple Optic Design
  940.     (using the refractive capabilities of raytracing).
  941.  
  942.     Mathematical Graphics
  943.     Since it is often easier to just intersect a surface via implicit
  944.     equations, rather than to tessellate some sort of representation of
  945.     the object.
  946.  
  947. ----
  948.  
  949. Iain Sinclair (axolotl@socs.uts.edu.au) comments:
  950.  
  951. Greg Ward's Radiance software does raytracing with diffuse interreflection,
  952. doesn't it?  It all depends on what you're trying to light (or design).
  953.  
  954. Straight radiosity looks strange in some circumstances, or simply
  955. isn't suitable. As you say, combinatory approaches are probably best.
  956.  
  957. >In fact, I don't
  958. >believe I've _ever_ seen a simulator that uses a ray tracing method.  If
  959. >you've got one up your sleeve, we'd LOVE to see it.  =^)
  960.  
  961. There are real-time auditory simulators which use raytracing.
  962.  
  963. -------------------------------------------------------------------------------
  964.  
  965. Goofy (?) Idea, Gary McTaggart (gmt@cis.ufl.edu)
  966.  
  967. Here's a really goofy brainstorm I had for distributed raytracing:
  968.  
  969. Why not incorporate into the proprietary communication programs that are used
  970. for such online services as Prodigy a simple raytracer which can calculate a
  971. very small number of pixels/frame?  First, when users first log on, you could
  972. upload a scene description to their computers.  While they are online, you
  973. could send escape codes to them for viewpoint changes and object
  974. repositioning, and have them return the value of a pixel or a small group of
  975. pixels.  The computers at the Prodigy-like company could shell out the scene
  976. information and collect the results to make for a very fast distributed
  977. raytracer.  This is assuming that the time spent sending scene information is
  978. not too substantial.
  979.  
  980. -------------------------------------------------------------------------------
  981.  
  982. Constant Time Ray Tracing, by Tom Wilson, Eric Haines, Brian Corrie, and
  983.     Masataka Ohta
  984.  
  985.  
  986. Tom Wilson posted to comp.graphics.research:
  987.  
  988. This is something that has been bugging me for a long time, but I'm glad I
  989. waited until now to bring it up. Whilst writing a paper and reading old issues
  990. of the RTNews (or is that RTOlds 8-), I was reminded of it.
  991.  
  992. Constant Time Ray Tracing: Theory OR Practice?
  993.  
  994. Two things I will refer to are:
  995.  
  996. OHT87 "Ray Coherence Theorem and Constant Time Ray Tracing Algorithm"
  997.       Masataka Ohta and Mamoru Maekawa
  998.       Computer Graphics 1987, Proc. of CGI '87, p. 303-314.
  999.  
  1000. OHT90 "Algorithm Order Discussion"
  1001.       Masataka Ohta and Pete Shirley
  1002.       Ray Tracing News, Vol. 1, #4, 1990
  1003.  
  1004. You might also read the Intro. to Ray Tracing by Glassner, et al., for a
  1005. summary of OHT87. I'm hoping Ohta may be reading, but I thought I would post
  1006. it for all to read.
  1007.  
  1008. THEORY
  1009.  
  1010. In theory, is constant time ray tracing as in OHT87 possible? Sure. Given a
  1011. sufficient 3D subdivision and a fine enough division of ray directions, each
  1012. list in the structure will contain fewer than some constant number of objects.
  1013. For a given ray, mapping the origin to the grid is constant time, mapping the
  1014. ray direction to one of the subdirections is constant time, and intersecting
  1015. the ray against a constant number of objects is constant time.
  1016.  
  1017. In theory, is constant time ray tracing on a 3D grid possible? Yes, given a
  1018. very huge grid. Suppose the grid is so large that tracing a ray through it
  1019. will result in less than a constant number of ray-object intersections, then
  1020. yes, right? Wait! What about the traversal of the grid? Well, if the grid
  1021. size is not a function of the number of objects, then the traversal time is
  1022. constant. Well, this can't be done. Even if you scale the grid size as a
  1023. function of the screen resolution, it can't be done. You can always make a
  1024. scene that will cause some rays to cause a lot of intersections.
  1025.  
  1026. OHT87 - yes
  1027. 3D grid - no
  1028.  
  1029. What does the OHT87 method do that the 3D grid doesn't? Perhaps the answer
  1030. lies in the preprocessing. The ray tracing is constant time, but is the
  1031. preprocessing? Of course not, but maybe that's still ok. I'll discuss that in
  1032. the next part.
  1033.  
  1034. REALITY
  1035.  
  1036. How much preprocessing is allowed? SUPER-SILLY EXAMPLE: Preprocessing consists
  1037. of computing all shade trees, and the ray tracing process consists of a table
  1038. look up based on the primary ray! Talk about asking a lot! Well, the ray
  1039. tracing sure is constant time, but the preprocessing isn't. Any technique that
  1040. processes the objects to build a data structure, won't be constant time, of
  1041. course. However, that still leaves the question of how much is allowed.
  1042.  
  1043. Consider this example: A scene consists of many parallel polygons that are
  1044. parallel to the image plane (like a stack of paper). These aren't run of the
  1045. mill 4-sided rectangles. They have holes in them. A lot of the holes line up
  1046. with rays through the view plane and they are really small. Now, suppose we
  1047. preprocess using the OHT87 algorithm. *I* think that no matter how many ray
  1048. directions you allow, you might not be able to eliminate enough objects to
  1049. make the list for that direction be smaller than a constant number. Remember,
  1050. we're not talking theory here, you can't have billions of ray directions.
  1051. There is some limit on the number of ray directions. I'm pretty sure this
  1052. falls under the no-coherence clause 8-) (p. 308 - "Because the algorithm
  1053. utilizes the coherence of the image, the efficiency of the algorithm heavily
  1054. depends on the coherence of the image. If there is no coherence, no
  1055. performance will be gained."). So ---> it's not constant time then!
  1056.  
  1057. FURTHER DISCUSSION
  1058.  
  1059. Now I'm not trying to shoot down the work done in OHT87. I don't know how it
  1060. compares to other schemes in implementation either. The problem I have is one
  1061. of terminology. Ray tracing has very little theory behind it. In the early
  1062. 80's, it seemed most algorithms we're "hacked together implementations" done
  1063. at the terminal (I hope that doesn't sound demeaning, since I don't mean it
  1064. that way). Of late, research is turning toward some theory since most of the
  1065. "good ideas" have been done already 8-): meaning we need to analyze what
  1066. exists to see what's wrong with it. However, there is still little theory
  1067. supporting the field. So "Constant Time..." is misleading since you can't
  1068. really do it, and who wants to generate theoretical images.
  1069.  
  1070. A somewhat unrelated thought arises from a comment in OHT90: "My algorithm
  1071. may consume possibly long and computationally complex pre-processing time to
  1072. analyze a scene. But, the important fact is that the time for pre-processing
  1073. is dependent only on the scene and not on the number of rays."
  1074.  
  1075. My first reaction is "GNNNAAARRRR?" The number of rays in a scene is bounded
  1076. above by a constant: total number of pixels * maximum size of a ray tree
  1077. (unless we assume an infinite ray tree -> unrealistic). Neither of these
  1078. factors is a function of the number of objects. Preprocessing is dependent
  1079. upon the scene and THAT is what is important. How much preprocessing of the
  1080. scene is ok? My SUPER-SILLY EXAMPLE does too much preprocessing.
  1081.  
  1082. Suppose we make a super-general assumption that preprocessing time can be no
  1083. greater than k% of the ray tracing time. Make k whatever you want, but in
  1084. OHT87 preprocessing is O(f(N)) (i.e. some function of N) and tracing is O(1).
  1085. So the preprocessing demands are too high using this k% assumption. Maybe it's
  1086. a bad assumption, but it's the one I see in the literature.
  1087.  
  1088. Finally this leads me to another point, support of a claim via testing.
  1089. Too often assumptions are made about the scene which are just too convenient.
  1090. Not only in this case, but in many, a sphere is just too simple an object to
  1091. support a proof. Again, I don't doubt the theory here (the proof itself is
  1092. sufficient), I doubt the reality. In this case, the reality is supported by
  1093. convenient scenes, which make it appear that the reality is sound (and thus
  1094. constant time). What I'm getting at is, give me some really ugly objects,
  1095. e.g. GEARS database.
  1096.  
  1097. Depending upon the response to this article, I might post another about
  1098. assumptions for algorithm testing. If I get flamed badly or there are no
  1099. followups, then I won't.
  1100.  
  1101. A little something to think about: No computer in the world, no matter what
  1102. its word size, no matter its memory size, no matter what its architecture, can
  1103. prevent overflow <--> no ray tracer in the world, no matter what the internal
  1104. data structure, can perform in constant time (you just can't ignore
  1105. preprocessing, as in the case of the SUPER-SILLY EXAMPLE).
  1106.  
  1107. I would like to reiterate that I am not claiming that the work in OHT87 is
  1108. incorrect. I just think that a theoretical concept is misleading in a
  1109. realistic research world. No mudslinging, and keep name-calling to four letter
  1110. words 8-).
  1111.  
  1112. ----
  1113.  
  1114. Eric Haines responds:
  1115.  
  1116. >REALITY
  1117. >
  1118. >How much preprocessing is allowed? SUPER-SILLY EXAMPLE: Preprocessing consists
  1119. >of computing all shade trees, and the ray tracing process consists of a table
  1120. >look up based on the primary ray!
  1121.  
  1122. I agree, "constant" time is a provocative, fun thing to say (and Ohta is not
  1123. the first to say it, Kaplan's "Space-Tracing, A Constant Time Ray-Tracer" from
  1124. SIGGRAPH 85 course notes is the first instance I know).  If your efficiency
  1125. scheme can, in theory, guarantee that given a ray, you know exactly which
  1126. object is hit by just performing some simple (non-recursive) look-up, then
  1127. you'll have constant time ray tracing.  The problem with such "in theory"
  1128. statements are that they can't be backed up in practice.  Either the scheme
  1129. takes an infinite amount of memory, or finding the actual object to intersect
  1130. in the efficiency structure takes O(log n) time, or some other catch.  So,
  1131. getting "near constant time" is more interesting in practice.
  1132.  
  1133. Many people make use of this kind of thing for rays from the eye:  do a hidden
  1134. surface preprocess (which is much faster than ray tracing in most situations,
  1135. and is constant with the number of objects) to find what is at each screen
  1136. sample.  This truly is "constant time" ray tracing because we know exactly
  1137. where all the rays are going to go (through the pixels in the screen), so we
  1138. can indeed store all these directions in a grid and easily walk through them
  1139. to find what's visible.  The look up time is constant, and there is at most one
  1140. object at each pixel.  The preprocess time is O(n) with the number of objects.
  1141.  
  1142. The intersections of rays from the eye then need just a look-up to get what's
  1143. hit.  Ohta & Maekawa, Arvo & Kirk's 5D idea, and my own shadow buffer try to
  1144. further this directional preprocessing.  Arvo & Kirk have a nice table
  1145. comparing the three in their chapter of "An Intro to RT".  From my own
  1146. experience it's impossible to solve the problem of, given an arbitrary ray,
  1147. doing an immediate look-up (i.e.  we don't have to traverse a hierarchy to
  1148. find our object, we just translate the ray information into a table index)
  1149. combined with always having at most a single object on the list.  By being
  1150. willing to not have all three elements we can often come up with schemes that
  1151. do the other two perfectly and the third fairly well.
  1152.  
  1153. Like the shadow buffer, Ohta creates grids containing candidate lists.  The
  1154. lists are not bounded in size, so the testing time is not a constant.  In his
  1155. defense, Ohta's scheme gives almost constant times for his sparse spheres case
  1156. and near constant for his dense spheres case.  It's impressive that it can do
  1157. so well, and this was back in 1987.  The cost is that you need a direction
  1158. cube structure for _each_ object in the scene, which is costly in
  1159. preprocessing time and memory.
  1160.  
  1161.  
  1162. >Consider this example: A scene consists of many parallel polygons that are
  1163. >parallel to the image plane (like a stack of paper). These aren't run of the
  1164. >mill 4-sided rectangles. They have holes in them. A lot of the holes line up
  1165. >with rays through the view plane and they are really small.
  1166.  
  1167. I agree, this case will make preprocessing schemes no longer constant.
  1168. You can do LOTS of preprocessing to try to resolve the indeterminate
  1169. areas, and you may have to get down to a ridiculous resolutions to attempt to
  1170. resolve these, and you still will have places where things fall apart.
  1171.  
  1172. Another approach is to work from the objects themselves to split up 5D space
  1173. and determine what object is visible for what set of positions and directions.
  1174. I recall seeing some computational geometry paper on doing something like
  1175. this, where you preprocess all 5D space into volumes, each of which is
  1176. associated with one object.  Aha, found it:
  1177.  
  1178. %A Marco Pellegrini
  1179. %T Stabbing and Ray Shooting in 3 Dimensional Space
  1180. %J Proceedings of the 6th Annual Symposium on Computational Geometry
  1181. %I Berkeley, CA
  1182. %D June 1990
  1183. %P 177-86
  1184.  
  1185. Since you were interested in theoretical papers, this is an interesting one to
  1186. check out.  To quote:  "The result presented in this paper, although not yet
  1187. practical because of the huge constants involved, is the first example of a
  1188. ray shooting algorithm with a sublinear cost per ray, for any set of triangles
  1189. and rays."  He proves that given a ray one can determine in O(log n) worst
  1190. case time which is the first triangle hit, with O(n^5) preprocessing (truly
  1191. the record for preprocessing time).  His results are interesting in that the
  1192. best he claims is O(log n), not O(1), because he knows pathological cases can
  1193. kill all the other schemes out there.  His bias is towards worrying about the
  1194. worst case performance, which most of the rest of us blithely ignore.  What's
  1195. interesting about his scheme is that he could maintain it's constant in
  1196. intersection testing time (in fact, the constant is zero), since he never
  1197. tests any rays against any triangles:  the scene is entirely encoded in a
  1198. structure, and he gets a ray and merely looks up what triangle (if any) is hit
  1199. by that ray.  It's accessing the structure and finding where the ray is in it
  1200. that takes O(log n).
  1201.  
  1202. Another good pathological case is the shell database (Introduction of Ray
  1203. Tracing News, volume 3, number 3).  Try it on your favorite ray tracer
  1204. sometime and see what happens:  many overlapping spheres bring most ray
  1205. tracers to their knees (mine included).  Most efficiency schemes are good
  1206. overall, but when a large number of the surfaces of complex objects overlap a
  1207. given volume of space, preprocessing that space well is impossible or very
  1208. costly.  It would be interesting to see how Ohta's scheme works on the shell
  1209. data, since it's entirely spheres.  Ohta's ray tracer is at various FTP sites,
  1210. though I haven't tried it out.
  1211.  
  1212.  
  1213. >Suppose we make a super-general assumption that preprocessing time can be no
  1214. >greater than k% of the ray tracing time. Make k whatever you want, but in
  1215. >OHT87 preprocessing is O(f(N)) (i.e. some function of N) and tracing is O(1).
  1216. >So the preprocessing demands are too high using this k% assumption. Maybe it's
  1217. >a bad assumption, but it's the one I see in the literature.
  1218.  
  1219. Good point - no matter what k% you assign, if tracing is really O(1) then you
  1220. can never in theory fulfill the k% ratio, since the number of objects can be
  1221. arbitrarily high.  The "k%" is just a rule of thumb working assumption in the
  1222. literature, not some theoretical limit that cannot be exceeded ("it'd be nice
  1223. if the preprocessing time was some percentage less than the ray tracing time"
  1224. is all "k%" is, after all).
  1225.  
  1226. What's interesting about preprocessing schemes is that once they're done you
  1227. can reuse them.  If you're making an animation of flying around a static
  1228. scene, that's a heck of a lot of pixels to compute, which massively amortizes
  1229. the cost of the one-time preprocess.  Because of this I think we'll see more
  1230. time spent preprocessing as the years go by (though if CPU speed increases
  1231. faster than memory size, then it might not be possible to store the preprocess
  1232. structures around for a large scene...).
  1233.  
  1234.  
  1235. >A little something to think about: No computer in the world, no matter what
  1236. >its word size, no matter its memory size, no matter what its architecture, can
  1237. >prevent overflow <--> no ray tracer in the world, no matter what the internal
  1238. >data structure, can perform in constant time (you just can't ignore
  1239. >preprocessing, as in the case of the SUPER-SILLY EXAMPLE).
  1240.  
  1241. Yep, "constant time" is an attention grabber, and saying "near constant time"
  1242. would be a bit more realistic.  If your efficiency structure has any hierarchy
  1243. in it, then you're not constant.  If you have a simple lookup structure like
  1244. an evenly spaced grid or somesuch, you're constant time lookup, but short of
  1245. infinite resolution you won't get a single object to test at _every_ spot in
  1246. the structure.
  1247.  
  1248. Well, that was certainly long-winded!  Anyway, I thought it was worth
  1249. mentioning the Pellegrini paper, since it's pretty obscure and one of the few
  1250. I've seen that really tries to tackle the theoretical aspects.  Hopefully I
  1251. didn't say anything too stupid here...
  1252.  
  1253. ----
  1254.  
  1255. Brian Corrie responds:
  1256.  
  1257. >Suppose we make a super-general assumption that preprocessing time can be no
  1258. >greater than k% of the ray tracing time. Make k whatever you want, but in
  1259. >So the preprocessing demands are too high using this k% assumption. Maybe it's
  1260. >a bad assumption, but it's the one I see in the literature.
  1261.  
  1262. I have just run into an interesting result similar to this.  I am working on a
  1263. MIMD parallel machine made by Fujitsu, the AP1000.  It has 128 processing
  1264. nodes, each processor being a SPARC chip running at 25 MHz.  Needless to say,
  1265. this thing is fast.  I have just gone through the process of parallelizing my
  1266. Ray Tracer on this machine.  Let me clarify that, I parallelized the
  1267. rendering, NOT the preprocessing.  I use Glassner's Space Subdivision
  1268. acceleration technique.  Guess what, in some cases, the preprocessing actually
  1269. takes longer than the rendering on this architecture.  Giving a demo just
  1270. isn't too satisfying when the boss is looking over my shoulder saying:
  1271.  
  1272. Boss: "whats it doing now?"
  1273. ME:   "Oh, preprocessing."
  1274. Boss: "Whats it doing now?"
  1275. ME:   "Still preprocessing.. ahhhh, now its rendering, oh there, its done."
  1276.  
  1277. This certainly doesn't fit the k% model that you state above.  It always
  1278. seemed that the preprocessing stage was insignificant compared to the
  1279. rendering time, but it really isn't.  You just need some strange circumstances
  1280. or some serious thought to see that the preprocessing time can not be ignored.
  1281.  
  1282. ----
  1283.  
  1284. Masataka Ohta responds:
  1285.  
  1286. >I would like to reiterate that I am not claiming that the work in OHT87 is
  1287. >incorrect. I just think that a theoretical concept is misleading in a
  1288. >realistic research world. No mudslinging, and keep name-calling to four letter
  1289. >words 8-).
  1290.  
  1291. Well, at the presentation of OHT87, I received silly questions from those
  1292. who can not understand the difference between realtime and constant time.
  1293.  
  1294. But it is not my problem. Any paper is misleading to those who can not
  1295. understand basic terminologies in it.
  1296.  
  1297. Constant timeness is a purely theoretical property. Remember it.
  1298.  
  1299. >THEORY
  1300.  
  1301. >OHT87 - yes
  1302. >3D grid - no
  1303.  
  1304. I agree.  Note that implicit simplification is that multiplication, addition
  1305. and address arithmetic are all O(1).
  1306.  
  1307. When I wrote OHT87, many (including me) believed 3D grid is O(log(N)) and
  1308. some even claimed O(1) without knowing what O(1) means.
  1309.  
  1310. >REALITY
  1311.  
  1312. >Remember,
  1313. >we're not talking theory here, you can't have billions of ray directions.
  1314. >There is some limit on the number of ray directions.
  1315.  
  1316. It is pointless.  Constant timeness is a purely theoretical property.
  1317. Theoretically, you can have billions of ray directions.  There is no limit on
  1318. the number of ray directions.
  1319.  
  1320. >I'm pretty sure this
  1321. >falls under the no-coherence clause 8-)
  1322.  
  1323. No.  Constant timeness of your case is covered by a sentence (p. 308) "It is
  1324. worthwhile to note that nearly all images can be calculated in this very fast
  1325. manner, if we can use unlimited pre-processing time and space".
  1326.  
  1327. >(p. 308 - "Because the algorithm
  1328. >utilizes the coherence of the image, the efficiency of the algorithm heavily
  1329. >depends on the coherence of the image. If there is no coherence, no
  1330. >performance will be gained."). So ---> it's not constant time then!
  1331.  
  1332. No, of course.  What my no-coherence clause means is that with insufficient D
  1333. (the number of directions) or M (the number of origins) it's not constant
  1334. time.
  1335.  
  1336. With large enough D and M determined by the coherence of scene, it will be
  1337. constant time again.
  1338.  
  1339. >FURTHER DISCUSSION
  1340.  
  1341. >A somewhat unrelated thought arises from a comment in OHT90: "My algorithm
  1342. >may consume possibly long and computationally complex pre-processing time to
  1343. >analyze a scene. But, the important fact is that the time for pre-processing
  1344. >is dependent only on the scene and not on the number of rays."
  1345.  
  1346. I said "analyze a scene", not "generate an image". OK?
  1347.  
  1348. >My first reaction is "GNNNAAARRRR?" The number of rays in a scene is bounded
  1349. >above by a constant: total number of pixels * maximum size of a ray tree
  1350. >(unless we assume an infinite ray tree -> unrealistic). Neither of these
  1351. >factors is a function of the number of objects.
  1352.  
  1353. You misunderstand basic terminologies.
  1354.  
  1355. An image have fixed number of pixels, but a scene itself has no resolution.  A
  1356. scene can be rendered into images with various resolutions and various
  1357. quality.
  1358.  
  1359. The number of rays to generate an image depends on required resolution and
  1360. quality (if you need antialiased but precise RGB value, you often must fire
  1361. large number of rays within a pixel), and not limited by any constant.
  1362.  
  1363. >Too often assumptions are made about the scene which are just too convenient.
  1364. >Not only in this case, but in many, a sphere is just too simple an object to
  1365. >support a proof. Again, I don't doubt the theory here (the proof itself is
  1366. >sufficient), I doubt the reality.
  1367.  
  1368. I used spheres in measurement because it is most unfavourable to the
  1369.                                  ^^^^^^^^^^^^
  1370. implementation of my algorithm. If you use complex shapes, possible
  1371. startup time for constant timeness might be masked. Implementation of
  1372. my algorithm might have required large constant time comparable to
  1373. ray bicubic patch intersection, which could have been masked if I
  1374. used a scene with bicubic patches.
  1375.  
  1376. See Fig. 4 for unbelievably small overhead (nearly equals to the time for ray
  1377. sphere intersection) of the implementation.
  1378.  
  1379. >In this case, the reality is supported by
  1380. >convenient scenes, which make it appear that the reality is sound (and thus
  1381. >constant time). What I'm getting at is, give me some really ugly objects,
  1382. >e.g. GEARS database.
  1383.  
  1384. Then, we can have beautiful but theoretically meaningless images.
  1385.  
  1386. What I want to show is constant time property.  To do so, we must be able to
  1387. control the number of objects in the scene up to several hundreds (or more,
  1388. see Fig. 8).
  1389.  
  1390. ----
  1391.  
  1392. and further comments from Masataka Ohta:
  1393.  
  1394. >This certainly doesn't fit the model that you state above. It always
  1395. >seemed that the preprocessing stage was insignificant compared to the
  1396. >rendering time, but it really isn't. You just need some strange circumstances
  1397. >or some serious thought to see that the preprocessing time can not be ignored.
  1398.  
  1399. When tracing state-of-the-art realistic scenes with state-of-the-art
  1400. complex shading, anti-aliasing and so on, tracing and shading time become
  1401. much much longer than when tracing sphere-only simply-shaded non-anti-aliased
  1402. scenes.
  1403.  
  1404. Hints for serious thought:
  1405.  
  1406.     1) the preprocessing time to achieve constant time property
  1407.        is constant once a scene is fixed.
  1408.  
  1409.     2) the preprocessing time to achieve constant time property
  1410.        is less than or nearly equal to tracing time for sphere-
  1411.        only images in my paper.
  1412.  
  1413.     3) the preprocessing time to achieve minimal total (preprocessing
  1414.        +tracing+shading) time to render an image of a scene need not be
  1415.        the preprocessing time to achieve constant time property for the
  1416.        scene. With the increase of the tracing+shading time, the trade-off
  1417.        shifts toward increasing tracing time complexity and reducing
  1418.        preprocessing time complexity.
  1419.  
  1420. ----
  1421.  
  1422. Brian Corrie responds:
  1423.  
  1424. It is true, once the scene is fixed, then pre-processing is fixed, so multiple
  1425. frames can be produced without that overhead in certain situations.  That is,
  1426. if the camera moves, lights go on and off, attributes change, then the
  1427. preprocessing does not need to be re-computed.  Only if the geometry changes
  1428. is this step needed.
  1429.  
  1430. It is also true that if I render complex images with complex shading and
  1431. scene interaction (reflection/refraction), the preprocessing time can
  1432. rapidly become insignificant again. Insignificance is all in the eye of
  1433. the renderer I suppose.
  1434.  
  1435. -------------------------------------------------------------------------------
  1436.  
  1437. VLSI for Ray Tracing, by Kenneth Cameron et al
  1438.  
  1439. Kenneth Cameron <kc@dcs.ed.ac.uk> asks:
  1440.  
  1441. I'm currently trying to get my Honours project sorted out for next year.
  1442. The idea is to produce some kind of raytracing/radiosity rendering chip.
  1443. Yup, thats right, put the whole rendering system on a single piece of
  1444. silicon. I've been trying to track down any past work on this. So far the
  1445. only mention I've found is that of Ullner's work in "An Introduction to
  1446. Raytracing".  Can anyone suggest any papers I should be looking for?
  1447.  
  1448. ----
  1449.  
  1450. George Kyriazis (kyriazis@rdrc.rpi.edu) writes:
  1451.  
  1452. Oh boy..  I'll be a bit negative on this.  This is only my opinion, so
  1453. I'd like to get some feedback from other people to see how much this
  1454. makes sense..
  1455.  
  1456. Ray-tracing and radiosity is a VERY computational intensive job.  Additionally,
  1457. it's a bit unhomogeneous.  What I mean by that is that there are lots of
  1458. different algorithms that need to be done:  Traversing the space subdivision
  1459. hierarchy, various intersection algorithms, (possibly) various shading
  1460. algorithms, etc.  Not to mention the immense amount of data that has to be
  1461. fed in those poor processing elements.
  1462.  
  1463. In the past the market tried to provide special-purpose hardware that is
  1464. perfect for just one problem, but has REAL trouble for others..  For example,
  1465. the Pixel Machine was great doing ray-tracing, but it had problems with
  1466. interactive graphics.  An SGI-style graphics pipeline is perfect for
  1467. interactive 3-D applications, but it just was not designed for ray-tracing
  1468. or radiosity-type applications.  On the other hand, general-purpose floating
  1469. point accelerators are getting faster and faster..  So, my guess is that
  1470. a whole bunch of fast, general purpose machines will eventually win, 'cause
  1471. the can provide more functionality and a smaller overall design cost.
  1472.  
  1473. Now, let's try to be constructive a bit here..  As I said before, doing
  1474. raytracing the traditional way is unstructured.  You are tracing a ray
  1475. who knows how many levels of reflections deep, but you don't really know
  1476. what type of primitive you are going to hit, so the rendering algorithm
  1477. should be ready for anything.  There has been some work a couple of years
  1478. ago (I could be mistaken, but I think at UIUC) about using an SIMD machine
  1479. for ray-tracing.  Now, if you think of normal ray-tracing as a depth-first
  1480. algorithm (we go as many levels deep as possible on the first pixel, then
  1481. go ahead on the next pixel, etc.), you can think of the SIMD work as
  1482. implementing ray-tracing in a breadth-first kind of way.  Finish up the
  1483. first level of intersections for all pixels in the image, then the ones
  1484. who survive go on to the second level of reflection, etc.  This brings
  1485. some more structure into the algorithm.
  1486.  
  1487. ----
  1488.  
  1489. Peter De Vijt (devijt@imec.be) writes:
  1490.  
  1491. A number of people did some studies on implementing a part of the algorithm
  1492. (the intersection calculations) in silicon.  No real silicon has been
  1493. demonstrated upto now.  Here are some refs.
  1494.  
  1495. %A Ron Pulleyblank
  1496. %A John Kapenga
  1497. %T The Feasibility of a VLSI Chip for Ray Tracing Bicubic Patches
  1498. %J IEEE Computer Graphics and Applications
  1499. %V 7
  1500. %N 3
  1501. %D March 1987
  1502. %P 33-44
  1503. %O also appears as "A VLSI Chip for Ray Tracing Bicubic Patches"
  1504. in Advances in Computer Graphics Hardware I, W. Strasser (ed.), 1987,
  1505. p. 125-140 and in
  1506. Tutorial: Computer Graphics Hardware: Image Generation and Display,
  1507. Computer Society Press, Washington, 1988, p. 328-339
  1508.  
  1509. %A Kadi Bouatouch
  1510. %A Yannick Saouter
  1511. %A Jean Charles Candela
  1512. %T A VLSI Chip for Ray Tracing Bicubic Patches
  1513. %J Eurographics '89
  1514. %I Elsevier Science Publishers
  1515. %C Amsterdam, North-Holland
  1516. %D Sept. 1989
  1517. %P 107-24
  1518.  
  1519. %A Alle-Jan van der Veen
  1520. %T Intersection Test for NURBS
  1521. %B Proc. of the IEEE Symp. on Computer Architecture & Real Time Graphics
  1522. %D June 1989
  1523. %C Delft, The Netherlands
  1524. %P 101-14
  1525.  
  1526. Implementing a complete raytracing/radiosity algorithm on one chip is IMHO not
  1527. possible.  The problem is that the algorithm itself is quite complex.  You'll
  1528. have to calculate intersection points for various primitives, reduce the
  1529. search space for the primitives you are going to calculate the intersections
  1530. with, do shading calculations, ...
  1531.  
  1532. Given the huge amount of work you'll have to perform, you will still need a
  1533. multiprocessor solution to get the images at a reasonable rate (After all
  1534. you've put a lot of effort in it, so you want some performance back) You need
  1535. a very good scheduling mechanism to get more than an impressive number of
  1536. Mythical FLOPS.
  1537.  
  1538. The basic algorithm for ray-tracing is pretty simple.  The intelligent
  1539. implementation isn't.  If you put the basic algorithm in silicon, an
  1540. intelligent software version will easily outperform your system.  A good vlsi
  1541. implementation will have to implement the more elaborate and complex
  1542. algorithm.  (Yeah such is life)
  1543.  
  1544. The kind of parallelism you need for vlsi is different than the one you need
  1545. for software.  On a general purpose multiprocessor system you can use all
  1546. kinds of parallelism, in vlsi you can't.  An ASIC can only be better than a uP
  1547. if it can take advantage of some specific aspects of an algorithm.  If the
  1548. algorithm is too complex, you can not take advantage of that, and the ideal
  1549. implementation looks pretty much like an ordinary general purpose uP.  (We
  1550. better leave that to the big R&D teams).  So forget about doing it on one
  1551. chip.
  1552.  
  1553. The only thing you can do is to break the algorithm apart and implement each
  1554. part or only the most interesting parts (= inner loops ) that will give you a
  1555. performance gain (such as the intersection calculations).
  1556.  
  1557. Here at IMEC we're doing just that as a sort of design exercise.  We're
  1558. planning to implement a part of the algorithm on a couple processors.
  1559.  
  1560. The algorithm is split in three big pieces:  rendering, narrowing the search
  1561. space for the intersection calculations and the intersection calculations
  1562. themselves.  The rendering will be done on general purpose processors for
  1563. flexibility.  Data base search and spline intersection calculations on two
  1564. custom processors.  The other intersection calculations will again be done on
  1565. GP uP's for flexibility.  Also a special processor is being built for
  1566. scheduling the operations in a multiprocessor environment.
  1567.  
  1568. The whole system is designed in such a way that each of these processors can
  1569. be replaced by a general purpose one and that some operations can be modified
  1570. (eg.  more primitives than we planned a specific processor for).  This way we
  1571. can build the system in different stages (first the intersection processor,
  1572. the scheduler, the data base searcher, and last an optional MMU) First
  1573. versions of the intersection processor and the scheduler should be ready
  1574. around july.
  1575.  
  1576. I must agree with George Kyriazis that eventually a GP machine will win, but
  1577. again this is only a design exercise and it's FUN.
  1578.  
  1579. ----
  1580.  
  1581. Jon Leech (leech@cs.unc.edu) writes:
  1582.  
  1583.     I think the original poster would be better off doing some regular part of
  1584. a rendering kernel, perhaps a ray-tracing hierarchy traversal chip.
  1585.  
  1586. ----
  1587.  
  1588. Sam Uselton (uselton@nas.nasa.gov) writes:
  1589.  
  1590. Two comments to add on the previous discussion.......
  1591.  
  1592. (1) the SIMD parallel ray tracing I know of, was done at Thinking Machines on
  1593. a Connection Machine by Hubert Delaney, who recently was kind enough to send
  1594. me 2 tech reports, which I haven't had time to read yet.
  1595.  
  1596. (2) Gershon Kedem (and probably some other folks) were working on VLSI support
  1597. for ray tracing of CSG defined objects several years ago.  The work was being
  1598. done at Duke University, although other NC Research Triangle entities were
  1599. probably involved.  I discussed the project with him in his office something
  1600. like 3 years ago.  Sorry, I don't have a reference.  [Cornell is also involved.
  1601. See ray tracing bibliography under Kedem or Ellis. - EAH]
  1602.  
  1603. ----
  1604.  
  1605. Thierry Priol (priol@irisa.fr) writes:
  1606.  
  1607. I agree with you, ray-tracing is so irregular (data driven) that designing a
  1608. VLSI processor for ray-tracing algorithms is a hard task.  We have done some
  1609. works on MIMD machine.  General purpose parallel MIMD machines are able to
  1610. produce very high efficiency for ray-tracing algorithms especially if you are
  1611. using a shared virtual memory on these kinds of machines!  (see "Ray Tracing
  1612. on Distributed Memory Parallel Computers:  Strategies for Distributing
  1613. Computation and Data" in "Parallel Algorithms and architectures for {3D} Image
  1614. Generation", ACM Siggraph'90 Course 28).
  1615.  
  1616. ----
  1617.  
  1618. From: rkaye@polyslo.csc.calpoly.edu (Dega Dude):
  1619.  
  1620. I would suggest to approach the problem from a different angle.  While it
  1621. would be an extreme job to implement an entire ray tracing/radiosity system in
  1622. silicon, you could implement some generic routines that usually take a lot of
  1623. CPU time quite easily.
  1624.  
  1625. You could code intersection and normal calculation routines for the basic
  1626. primitives you would like to have in your system.  Some other things to code
  1627. would be generic routines required by your acceleration techniques, such as
  1628. voxel-object intersection routines or bounding volume routines.
  1629.  
  1630. There are many 'generic' CPU intensive routines that can be implemented in
  1631. silicon.  The software can then adapt around the chip's capabilities, giving
  1632. you the flexibility to change the system.
  1633.  
  1634. -------------------------------------------------------------------------------
  1635.  
  1636. The Moon Revisited, by Tom Duff (td@alice.att.com)
  1637.  
  1638. zap@lysator.liu.se (Haakan Andersson) wonders about the moon's reflection
  1639. function, and why Phong shading doesn't render it well.  (I won't quote any
  1640. details.)
  1641.  
  1642. The most important thing to remember about the moon is that while it is
  1643. spectacularly un-specular, it is by no means a Lambertian reflector -- this is
  1644. why Phong shading can't model it well, contrary to hollasch@kpc.com (Steve
  1645. Hollasch @ Kubota Pacific Computer, Inc.).
  1646.  
  1647. An ideal full moon is equally bright everywhere -- its brightness does not
  1648. drop off toward the edges!  (The real moon differs from the ideal moon only in
  1649. that its albedo is non-uniform.  For example, the maria are darker than the
  1650. mountains.)
  1651.  
  1652. A model that works well for the moon is to think of it as covered in a dust of
  1653. microscopic Lambertian reflectors.  When viewed from the light source
  1654. direction, the dust particles will reflect light equally, regardless of the
  1655. direction of the moon's surface normal.
  1656.  
  1657. When viewed from some other direction (i.e. when the moon is not full), the
  1658. dust particles still reflect light equally, but some of them are shadowed by
  1659. others.  Shadowing increases when the angle between the light and the viewing
  1660. direction increases so that the reflected light travels through more dust, and
  1661. when the angle between the surface normal and the light direction increases,
  1662. so that the incident light travels through more dust.  Of course, the total
  1663. light reflected from the dust particles varies with viewing angle as well
  1664. because they are only lit on one side.
  1665.  
  1666. There are many ways to convert this qualitative description into an analytic
  1667. model, depending on exactly how you model self-shadowing of dust.  Jim Blinn
  1668. has a paper on illumination functions for clouds of dust (in 1979 Siggraph
  1669. proceedings, I think -- I don't have the precise reference at my fingertips)
  1670. that describes this in fair detail and gives a lunar reflection model that
  1671. works really well.
  1672.  
  1673. I suspect that even people without my astigmatism have trouble telling by
  1674. looking at its shape whether the moon is exactly full or one day away from it.
  1675. The difference in shading, however, is fairly dramatic.  When its full, the
  1676. moon looks like a silver dollar in the sky.  Even one day away and still looks
  1677. like a perfect circle, it shades off to one side or the other by a noticeable
  1678. amount.
  1679.  
  1680. -------------------------------------------------------------------------------
  1681.  
  1682. Soft Shadow Ideas, compiled by Derek Woolverton (woolstar@gumby.cs.caltech.edu)
  1683.  
  1684.    Could anyone suggest any open solutions (i.e. ones that I could implement
  1685. without owing royalties, I heard that the Pixar noise algo. was patented.)
  1686.  
  1687. [Derek sent me his responses, some of which are below. - EAH]
  1688.  
  1689. --------
  1690.  
  1691. >From Samuel P. Uselton (uselton@wk207.nas.nasa.gov)
  1692.  
  1693. I'm pretty sure that general Monte Carlo evaluation of an integral of a
  1694. function is a general, well known mathematical idea, and as such not
  1695. patentable.  If the PIXAR patent is valid, it must patent some particular
  1696. method (=implementation) for doing this evaluation.  I assume it is the jitter
  1697. sampling idea presented in papers by Cook, et al.
  1698.  
  1699. I think our implementation of the integral evaluation is sufficiently
  1700. different that it is OK.  See Redner, Lee, Uselton, "Statistically Optimised
  1701. Sampling for Distributed Ray Tracing", SIGGRAPH '85.
  1702.  
  1703. Sorry I can't supply code.  The original source code we wrote (actually mostly
  1704. written by Lee) belongs to Amoco, and is in Fortran for an IBM 3090 anyway.
  1705. There is a plan to create a "liberated" version, but it is not available
  1706. at least from us.
  1707.  
  1708. If you, or anyone, wants to convince me I'm wrong and that we really DO
  1709. infringe the patent, or that an arguable case could be made, please let me
  1710. know, because we ARE extending our results.
  1711.  
  1712. --------
  1713.  
  1714. >From Lawrence Kesteloot (lkestel@gmuvax2.gmu.edu)
  1715.  
  1716. The method you describe can be easily modified to make the lamp a rectangle
  1717. instead of a sphere.  This makes the light into a fluorescent tube.
  1718.  
  1719. This method is quite good and realistic but, as you said, the noise is fairly
  1720. bad for low n's (<64).  Another way which I thought about (and I don't know if
  1721. anyone's done it yet), but haven't actually implemented yet, is to use some
  1722. kind of approximation formula.  For example, if you've got a sphere sitting on
  1723. a surface and you're trying to evaluate the darkness of that shadow at some
  1724. point below the sphere, you can run a ray from the point on the surface to the
  1725. light, find the two roots of the intersection, and use the DISTANCE between
  1726. the two roots, in some kind of formula which would involve the radius of the
  1727. sphere and lamp and distance to the lamp and surface, to determine the
  1728. darkness at that point.  It is not scientific, but points that intersect close
  1729. to the edge of the sphere will get two roots that are close together and this
  1730. would make that shadow lighter.  I haven't even implemented this or thought of
  1731. a formula, but if you get any kind of results with it please let me know.  It
  1732. would be very fast, as you can imagine.  It will most likely fail in strange
  1733. circumstances such as points that are shadowed by two objects at once.  I
  1734. guess that's the penalty for getting away from pure ray-tracing...
  1735.  
  1736. I can also think of another way to do it, but much harder to explain in
  1737. writing.  It is similar to yours but would probably reduce the noise.  Imagine
  1738. that you run a ray from the point in question to the light center.  You then
  1739. find a circle, centered at the light, radius of the light, which is
  1740. perpendicular to the ray.  You then pick <n> equidistant points on the edge of
  1741. that circle and run rays through them.  This will give you good soft shadows
  1742. and low noise (because there is no randomness), but might turn the shadow into
  1743. "rings" of shades (this would depend on the number of points, obviously).
  1744. Also, the process of finding that circle might be quite slow.  Maybe an
  1745. approximation to the angle of the circle in 30 degree increments could be done
  1746. (30 degrees would be enough I suppose).  But that might make the "ring" effect
  1747. worse.
  1748.  
  1749. [This was tried by Brigitta Lange, and is in her paper "The Simulation of
  1750. Radiant Light Transfer with Stochastic Ray-Tracing", Second Eurographics
  1751. Workshop on Rendering, Barcelona, Spain, May 1991.  Proceedings should be
  1752. published by Springer-Verlag realsoonnow.  Anyway, her results were mixed,
  1753. giving "ring" artifacts as I recall.  - EAH]
  1754.  
  1755. Let me know what you think.
  1756.  
  1757. Oh!  I almost forgot.  This is very important:  Don't sent <n> rays from
  1758. every point on the surface.  Before you start the picture, use the
  1759. position of the light and the spheres to make rectangles on the surface
  1760. where the shadow is likely to fall for each object.  Then send 1 or 2
  1761. rays outside the rectangles, and <n> inside any rectangle.  If you need
  1762. the formula for finding that rectangle I can send you that piece of code
  1763. from my tracer.
  1764.  
  1765. ----
  1766.  
  1767. John responds:
  1768.  
  1769. > You then pick <n> equidistant points on the edge of that circle
  1770. > and run rays through them.  This will give you good soft shadows
  1771. > and low noise.
  1772.  
  1773.    And very visible banding.  Oh well.  What I am looking for is finding the
  1774. plane perpendicular to the ray at the light, and using a pre-computed table of
  1775. random offsets with a poisson distribution.
  1776.  
  1777.    I still don't have a quick and elegant system of finding the plane and two
  1778. basis vectors.
  1779.  
  1780. --------
  1781.  
  1782. From: philip@bigben.dle.dg.com (Philip Gladstone)
  1783.  
  1784. The standard trick is to do adaptive sampling.  In my ray-tracer, I shoot a
  1785. number of rays through each pixel, and then randomly select a point on the
  1786. surface of the light source to for shadow calculations.  After a few rays have
  1787. been cast, the standard deviation of the values returned is calculated to see
  1788. if more rays need to be cast.  [This is oversimplifying quite a lot, as the
  1789. points are not really chosen at random as there is a nearness check.  Further,
  1790. subsampling only takes place in an area of high standard deviation.]
  1791.  
  1792. This also buys you antialiasing on edges etc.  This gives a very nice output
  1793. for very little increase in cost -- I start out with four rays per pixel
  1794. (though this should probably be increased somewhat) with a limit of 200 rays.
  1795. This givs an average number of rays per pixel of a reasonable picture of about
  1796. 6, with a few pixels having 200!
  1797.  
  1798. --------
  1799.  
  1800. From: shirley@iuvax.cs.indiana.edu (peter shirley)
  1801.  
  1802. Just like pixel sampling, light source sampling works better is the "random"
  1803. points are replaced by "quasi-random" points.  Quasi-random points can be
  1804. generated by making sure no two points are too close, or by hand generating
  1805. them for storage in lookup tables.
  1806.  
  1807. See the ray tracing book under jittering or Poisson disk sampling for further
  1808. details.
  1809.  
  1810. PS- I think you'll have better luck choosing points on the projected area
  1811. of the light source.  Choosing from within the sphere would be correct if
  1812. the light originated throughout the sphere.
  1813.  
  1814. -------------------------------------------------------------------------------
  1815.  
  1816. Book Announcement: Multiprocessor Methods for Computer Graphics Rendering,
  1817.     by Scott Whitman (slim@tazdevil.llnl.gov)
  1818.  
  1819. Multiprocessor Methods for Computer Graphics Rendering, by Scott Whitman,
  1820. Jones and Bartlett Publishers, March 1992.  ISBN 0-86720-229-7.
  1821.  
  1822. The book can be ordered by mail directly from Jones and Bartlett Publishers,
  1823. 20 Park Plaza, Boston, MA 02116, or by phone, 1-800-832-0034 or by e-mail,
  1824. kpeters@math.harvard.edu.  Prepaid orders (MC, VISA or check) will not be
  1825. charged postage or handling.
  1826.  
  1827. The problem of quickly generating three-dimensional synthetic imagery has
  1828. remained challenging for computer graphics researchers due to the large amount
  1829. of data which is processed and the complexity of the calculations involved.
  1830. This book involves a thorough investigation into the problem of using a
  1831. massively parallel computer to perform three-dimensional computer graphics
  1832. rendering.  The algorithms which are analyzed in this monograph present
  1833. several alternative approaches to image space decomposition as well as remote
  1834. memory access.  A number of pointers are given so that researchers intending
  1835. to develop their own parallel rendering algorithm will be able to obtain high
  1836. performance and good speedup from a variety of multiprocessor architectures.
  1837.  
  1838. Table of Contents:
  1839.  
  1840. 1. Introduction
  1841.     1.1. Problem Description
  1842.     1.2. Overview of Accelerated Rendering Techniques
  1843.     1.3. Research Context
  1844.     1.4. Document Overview
  1845. 2. Overview of Parallel Methods for Image Generation
  1846.     2.1. Criteria for Evaluation of Parallel Graphics Display Algorithms
  1847.     2.2. Taxonomy of Parallel Graphics Decompositions
  1848.     2.3. Conclusions
  1849. 3. Issues in Parallel Algorithm Development
  1850.     3.1. Architectural Choices
  1851.     3.2. Comparison of MIMD Methodologies
  1852.     3.3. The BBN Programming Environment
  1853.     3.4. Summary
  1854. 4. Overview of Base Level Implementation
  1855.     4.1. Design of the Basis Algorithm
  1856.     4.2. Testing Procedures
  1857.     4.3. Performance Analysis
  1858.     4.4. Summary
  1859. 5. Comparison of Task Partitioning Schemes
  1860.     5.1. Data Non-Adaptive Partitioning Scheme
  1861.     5.2. Data Adaptive Partitioning Scheme
  1862.     5.3. Task Adaptive Partitioning Scheme
  1863.     5.4. Conclusions
  1864. 6. Characterization of Other Parameters on Performance
  1865.     6.1. Shared Memory Storage and Referencing
  1866.     6.2. Machine Parameters
  1867.     6.3. Scene Characteristics
  1868.     6.4. Conclusions
  1869. 7. Conclusion
  1870.     7.1. Summary
  1871.     7.2. Future Work
  1872. References
  1873. Appendix
  1874.     A. Information on Test Scenes
  1875.     B. Data for Various Algorithms
  1876.     C. Supplementary Graphs
  1877. Index
  1878.  
  1879. -------------------------------------------------------------------------------
  1880. END OF RTNEWS
  1881.  
  1882.  
  1883.